package gov.fgn.sijyp.general.util;

import gov.fgn.sijyp.bienes.data.BienDocumento;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.component.html.HtmlInputText;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;

import org.richfaces.event.FileUploadEvent;
import org.richfaces.model.UploadedFile;

public class FileUploadBean implements Serializable {

	protected static final long serialVersionUID = -8472029478437828474L;

	protected BienDocumento bienDocumento;

	protected boolean ocultarUpload;
	
	protected UIComponent uploadComponent;
	
	

	public UIComponent getUploadComponent() {
		return uploadComponent;
	}

	public void setUploadComponent(UIComponent uploadComponent) {
		this.uploadComponent = uploadComponent;
	}

	public FileUploadBean() {
		this.bienDocumento = new BienDocumento();
	}

	private void msjArchivoFalta(FacesContext fc) {
		String mensajeMostrar;
		mensajeMostrar = "bienes.fileUpload.archivofalta";
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
				ManagedBeanUtils.getMessagesBundle().getString(mensajeMostrar),
				null);
		
		fc.addMessage(uploadComponent.getClientId(), message);
		fc.renderResponse();
		
	}

	public void uploadListener(FileUploadEvent event) {
		UploadedFile item = event.getUploadedFile();
		byte[] archivo = item.getData();

		this.bienDocumento.setArchivo(archivo);
		System.out
				.println("File set!: " + this.bienDocumento.getArchivo() != null
						+ ", name: " + item.getName());

		this.bienDocumento.setNombre(item.getName());
		this.bienDocumento.setMimeType(item.getContentType());
		this.bienDocumento.setLongitud(BigDecimal.valueOf(item.getSize()));
	}

	public void download() {

		ManagedBeanUtils.descargarBienDocumento(bienDocumento);
	}

	public void limpiarUpload() {
		ocultarUpload = false;
		bienDocumento.setArchivo(null);
	}

	public BienDocumento getBienDocumento() {
		return bienDocumento;
	}

	public void setBienDocumento(BienDocumento bienDocumento) {
		this.bienDocumento = bienDocumento;
	}

	public boolean isOcultarUpload() {
		return ocultarUpload;
	}

	public void setOcultarUpload(boolean ocultarUpload) {
		this.ocultarUpload = ocultarUpload;
	}

	private boolean checkByteArray(final byte[] array) {
		return array == null || array.length <= 0;
	}

	/**
	 * @return respuesta : bandera que identifica si el archivo es correcto o no
	 */

	public boolean isArchivoInvalido() {
		return isArchivoInvalido(false);
	}

	public boolean isArchivoInvalido(boolean required) {

		FacesContext context = FacesContext.getCurrentInstance();
		UIViewRoot root = context.getViewRoot();

		String componentId = "uploadDocumento_fileSijyp";
		List<UIComponent> listUI = new ArrayList<UIComponent>();
		ManagedBeanUtils.findComponent(root, componentId, listUI);

		boolean respuesta = false;
		
		if(bienDocumento.getTpDocumentoBean().getTpDocumento() != null) {
			boolean null_or_empty = checkByteArray(bienDocumento.getArchivo());
			if (null_or_empty) {
				msjArchivoFalta(FacesContext.getCurrentInstance());
				respuesta = true;
				return respuesta;
			}
		}

		if (required) {
			boolean null_or_empty = checkByteArray(bienDocumento.getArchivo());
			if (null_or_empty) {
				msjArchivoFalta(FacesContext.getCurrentInstance());
				respuesta = true;
			}
		}

		/*
		 * if (null_or_empty) { respuesta = true;
		 * 
		 * for (UIComponent uiComponent : listUI) { FacesMessage fm = new
		 * FacesMessage(FacesMessage.SEVERITY_ERROR,
		 * ManagedBeanUtils.getMessagesBundle() .getString("general.requerido"),
		 * ManagedBeanUtils.getMessagesBundle()
		 * .getString("general.requerido"));
		 * FacesContext.getCurrentInstance().addMessage
		 * (uiComponent.getClientId(context), fm); }
		 * 
		 * }
		 */

		return respuesta;
	}

}
